// 泛型约束：如果我们直接对一个泛型参数取 length 属性, 会报错, 因为这个泛型根本就不知道它有这个属性
(() => {
    // 定义一个接口来约束,用来约束将来某个属性
    interface ILength {
        length: number
    }

    function getLength<T>(x: T): number {
        return x.length
    }
})()